<?php 

/**
 * 列表管理控制器
 * @author 阿柱 <422852954@qq.com>
 */
class ListController extends CommonController{
    /**
     *   **列表展示方法
     */
    public function index(){
    	$this->topCate();
//		分配子分类-------------------------
		$cid=Q('get.cid',0,'intval');
		$sonCate=K('Category')->where("pid={$cid}")->all();
//		如果该分类没有子分类
		if(empty($sonCate)){
//			查询它的父级
			$father=K('Category')->where("cid={$cid}")->find();
//			把父级的子分类分配出去
			$sonCate=K('Category')->where("pid={$father['pid']}")->all();
		}
		$this->assign('sonCate',$sonCate);
//		递归获得父级
		$fatherCate=$this->_getTop(K('Category')->all(),$cid);
//		数组反转	
		$fatherCate=array_reverse($fatherCate);
//		分配父级分类-----------------------
		$this->assign('fatherCate',$fatherCate);
		
				
//		1.通过cid获得所有对应的商品gid--------------
		$gids=K('Category')->cidGetGid($cid);
//		如果分类下有商品
		if($gids){
//			2.通过gid获得对应的属性值--------------
			$attr=K('GoodsAttr')->gidGetAttr($gids);
			$temp=S("rand_attr_{$cid}");
//			如果没有随机取得五个属性的值
			if(!$temp){
//				随机取5个属性
				$rand=array_rand($attr,5);	
				$temp=array();
				foreach ($rand as $v) {
					$temp[]=$attr[$v];
				}
				S("rand_attr_{$cid}",$temp,60*5);
			}
//				筛选参数
			$total=count($temp);
//				拆分param参数  数组填充填充0
			$param=isset($_GET['param']) ? explode('_', $_GET['param']) : array_fill(0,$total,0);	 		
//				如果用户乱传参拆分的结果不等于总数的结果
			if(count($param)!=$total)   $param=array_fill(0, $total,0);
			$this->assign('param',$param);
//			通过get过来的参数 商品筛选
			$lastGids=K('GoodsAttr')->filterGids($param,$gids);
		}else{
//			如果没有gid
			$lastGids=array();
		}
//		分配属性		
		if(isset($temp))  $this->assign('attr',$temp);
		$inGid=implode(',', $lastGids);
//		分页 
		if($inGid){ 
			$total=count($lastGids);
			$pageObj=new Page($total,4,5);
			$this->assign('page',$pageObj->show());
			$listData=K('Goods')->where("gid IN ({$inGid})")->limit($pageObj->limit())->all();
	//		分配商品		
			$this->assign('listData',$listData);			
		}



//			
////		查询相应范围的价格
//		$price=Q('get.price','');
//		$where="";
//		$priceData=array();
//		if($price){
//			$pattern="/\,/i";
//	//		正则匹配（因为最后一个没有逗号范围是500以上）
//			$bool=preg_match($pattern, $price);
//			if($bool){
//				$arr=explode(',', $price);
//				foreach ($tempData as $v) {
//					if($v['shopprice']<=$arr[1] && $v['shopprice']>=$arr[0]){
//						$priceData[]=$v;
//					}
//				}
//			}else{
//				foreach ($tempData as $v) { 
////				查询500价格以上	
//					if($v['shopprice']>=$price){
//						$priceData[]=$v;
//					}
//				}
//			}
//		}
////		p($priceData);
//		if($priceData){
////			如果筛选价格分配筛选价格变量
//			$this->assign('listData',$priceData);
//		}else{
////			没有的话就分配属性变量
//			$this->assign('listData',$tempData);
//		}


        $this->display(); 
    }
	
	


	/**
	 * 获得子集分类CID,不包括自己
	 */
//	private function getSonCid($data,$cid){
//		$tmp='';
////		循环分类数据查找是否有子类
//		foreach ($data as $v) {
//			if($v['pid']==$cid){
//				$tmp.=$v['cid'] . ',';
//				$tmp.=$this->getSonCid($data,$v['cid']);
//			}	
//		}
//		return $tmp;
//	}
	
	/**
	 * 递归获得父级分类
	 */
	private function _getTop($data,$cid){
		static $temp=array();
		foreach ($data as $v) {
			if($v['cid']==$cid){
//				压入临时数组
				$temp[]=$v;
				$this->_getTop($data,$v['pid']);
			}
		}
		return $temp;
	}
	
	
	
	
}
 

 
 

 ?>